package com.heima.juc.n4;

import com.heima.juc.n2.Sleeper;
import lombok.extern.slf4j.Slf4j;

/**
 * @author : leimingchao
 * @date Date : 2022年02月10日 23:23
 */
@Slf4j(topic = "c.TestWaitNotify3")
public class TestWaitNotify3 {

    static final Object lock = new Object();

    public static void main(String[] args) {

        new Thread(() -> {

            synchronized (lock) {
                log.debug("执行。。。。");
                try {
                    //让线程在lock上一直等待下去
                    lock.wait();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                log.debug("其他代码。。。。");
            }

        },"t1").start();

        new Thread(() -> {

            synchronized (lock) {
                log.debug("执行。。。。");
                try {
                    //让线程在lock上一直等待下去
                    lock.wait();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                log.debug("其他代码。。。。");
            }

        },"t2").start();

        //主线程2秒后执行
        Sleeper.sleep(0.5);
        log.debug("唤醒obj 上其它线程");
        synchronized (lock) {

            //随机唤醒obj上一个线程
            // lock.notify();

            //唤醒obj上所有等待的线程
            lock.notifyAll();
        }
    }
}
